CGI2000-Trabalho 1

Data de entrega: 4 de abril.

Considere o TAD (Tipo Abstrato de Dados) Image cuja interface está definida em image.h e a implementação em image.c (ambos disponíveis na web pelos seus respectivos links). Desenvolva e implemente o método

Image *imgReduceTo256(Image *img);

que retorna o ponteiro de uma nova imagem que aproxima a imagem original, img, com a mesma resolução espacial mas com apenas 256 cores distintas.

Critério de correção deste trabalho (em ordem de importância):

  1. Qualidade da imagem gerada medida através da distancia entre a cor dos pixels correspondentes da imagem original (R,G,B) e da aproximada (R',G',B').
    Como medida de erro de cada pixel será adotada a seguinte formula:

    erro = 0.6*|Y-Y'| + 0.2*|Cb-Cb'| + 0.2*|Cr-Cr'|

    onde:
    Y = 0.29900 * R + 0.58700 * G + 0.11400 * B;
    Cb = -0.16874 * R - 0.33126 * G + 0.50000 * B + 128;
    Cr = 0.50000 * R - 0.41869 * G - 0.08131 * B + 128;

    Todas as componentes de cor R,G,B,Y,Cb e Cr tomam valores no intervalo [0,255].
  2. Eficiência (tempo de excecução) da quantização.
  3. Qualidade do código.
  4. Prazo de entrega. Após 4abr2000 este critério se torna o mais relevante de todos.

Mateiral de apoio para o trabalho:

Exemplos de imagens ppm: leão, navios, bolas e avião.
Exemplo de uso do TAD Image: teste.c
Um arquivo zip com o essencial para fazer o trabalho.
Um programa para auxiliar na correção do trabalho.

 

Obs: A tansformada inversa (YCbCr para RGB) é dada por:

               R  =  Y + 1.40200 * (Cr - 128) ;
               G  =  Y - 0.34414 * (Cb - 128 ) - 0.71414 * (Cr-128) ;
               B =   Y + 1.77200 * (Cb - 128) ;

 

Dica para medir tempo: (time.c)


última atualização: 3 de abril 2000 - gattass